2026/1/11 22:15:22
网站建设
项目流程
cms系统和网站后台系统,卖主机 服务器的网站,烟台网站搭建,WordPress插件做成主题代码解题思路
算法#xff1a; 双指针–左右指针
场景分类#xff1a; 对称操作类问题
思路#xff1a;
左指针left指向字符串开头#xff0c;右指针right指向字符串末尾
通过内层while循环#xff0c;使得左指针left和右指针right指向的字符都是英文字母。随后交换两指针指向…解题思路算法双指针–左右指针场景分类对称操作类问题思路左指针left指向字符串开头右指针right指向字符串末尾通过内层while循环使得左指针left和右指针right指向的字符都是英文字母。随后交换两指针指向字符的位置交换操作结束后要让左右指针各移动一步进而找下一组字母最后返回处理后的字符串思考1. 本题中双指针的作用本题要求将字符串中出现字母的位置反转那么双指针的作用就是找到一组位置正好相反的字母2. 为什么在交换操作完成后左右指针要各移动一步在交换操作完成后左右指针指向的字符均是字母下一步我们应该找到下一组位置相反的字母。但是现在左右指针已经指向了字母如果不各移动一步那么内层的两个while循环将永远不会工作。此时左右指针会一直停留在第一组字母的位置一直进行交换操作。这样就会导致左右指针无法找到下一组字母反而陷入到了死循环导致程序超时。(当然因为做该题时距离上一次刷题过了好久时间所以也有这个原因导致没有想到该问题)代码classSolution{public:boolisEnglish(charch){// 判断字符是否为英文字母if((chachz)||(chAchZ))returntrue;returnfalse;}stringreverseOnlyLetters(string s){intleft0,rights.length()-1;// 左右指针while(leftright){// 让左右指针指向英文字母while(leftright!isEnglish(s[left]))left;while(leftright!isEnglish(s[right]))right--;// 左右指针指向英文字母后交换两字符swap(s[left],s[right]);// (第一次没想到导致超时)// 左右指针各移动一步找下一个英文字母left;right--;}returns;}};收获体会该题双指针的作用在特定情况下要有左右指针各移动一步的操作