字符串旋转

题目:Reverse String (难度一颗星)

Write a function that takes a string as input and returns the string reversed.
Example:
Given s = "hello", return "olleh".

实现:

 1 class Solution {
 2 public:
 3     string reverseString(string s) {
 4         int length = s.length();
 5         int start = 0;
 6         int ends = length - 1;
 7         while(start < ends)
 8         {
 9             int temp = s[start];
10             s[start] = s[ends];
11             s[ends] = temp;
12             start++;
13             ends--;
14         }
15         return s;
16     }
17 };

题目:Reverse Vowels of a String (难度一颗星)

Write a function that takes a string as input and reverse only the vowels of a string.

Example 1:
Given s = "hello", return "holle".

Example 2:
Given s = "leetcode", return "leotcede".

实现:

 1 class Solution {
 2 public:
 3     bool validate(char c)
 4   {
 5         return (c == ‘a‘) || (c == ‘e‘) || (c == ‘i‘) || (c == ‘o‘) || (c == ‘u‘) || (c == ‘A‘) || (c == ‘E‘) || (c == ‘I‘) || (c == ‘O‘) || (c == ‘U‘);
 6   }
 7
 8     string reverseVowels(string s) {
 9         int starts = 0;
10         int ends = s.size()-1;
11         while (starts < ends)
12     {
13             while (!validate(s[starts]))
14       {
15                 starts++;
16       }
17             while (!validate(s[ends]))
18       {
19                 ends--;
20       }
21             if (starts > ends)
22       {
23                 break;
24       }
25             int temp = s[starts];
26             s[starts] = s[ends];
27             s[ends] = temp;
28             starts++;
29             ends--;
30   }
31         return s;
32 }
33 };
时间: 2024-11-05 12:36:18

字符串旋转的相关文章

笔试算法题(35):最长递增子序列 &amp; 判定一个字符串是否可由另一个字符串旋转得到

出题:求数组中最长递增子序列的长度(递增子序列的元素可以不相连): 分析: 解法1:应用DP之前需要确定当前问题是否具有无后效性,也就是每个状态都是对之前状态的一个总结,之后的状态仅会受到前一个状态的影响:对于递增子序列 而言,可以首先确定前面k个元素的最长子序列,然后计算增加一个元素之后的最长子序列.由于每个位置i都会与0-i的每个位置之前的LIS进行比较,并选 择保持递增的一个序列,所以总能找到LIS,但是时间复杂度为O(N^2),空间复杂度为O(N): 此解法的性能的瓶颈在于对于位置为i+

字符串旋转问题

字符串旋转问题:"abcdefgh" 向左旋转3个字符,"defghabc" int gcd(int a,int b) {//求最大公约数 if(a==0||b==0) return -1; int t=a; if(a<b) { a=b; b=t; } while(b) { t=a%b; a=b; b=t; } return a; } void rotation(char *p,int n,int rotdist) {//旋转 int right=gcd(ro

IT企业面试题(java描述)-字符串旋转(旋转字母或者单词)

这一章节我们来讨论一下IT企业面试题:字符串旋转(旋转字母或者单词). 题目: 将字符串"abcdef"旋转成"defabc" 或者 将字符串"i am a student."旋转成"student. a am i" 而且在上面的题目里面还会加上不能够使用库函数的限制,我们下面将讨论解题的思路以及具体的代码. 1.思路 (1)暴力解法 就是一个字符一个字符的往后扔 (2)分部法 将不旋转部分和旋转部分分开来处理,先各自反转,再

【C语言】编写函数实现字符串旋转

//编写函数实现字符串旋转 #include <stdio.h> #include <assert.h> #include <string.h> void reverse(char *left, char *right) { char temp; assert(left); assert(right); while (right > left) { temp = *left; *left = *right; *right = temp; left++; right

【c语言】判断一个字符串是否为另外一个字符串旋转之后的字符串

// .判断一个字符串是否为另外一个字符串旋转之后的字符串. // 例如:给定s1 = AABCD和s2 = BCDAA,返回1,给定s1=abcd和s2=ACBD,返回0 #include <stdio.h> #include <string.h> #include <assert.h> int rotate(char *p, char *q) { assert(p != NULL && q != NULL); strncat(p,p,strlen(p

abcdef-&gt;cdefab(字符串旋转)

题目:左旋转字符串 定义字符串的左旋转操作:把字符串前面的若干个字符移动到字符串的尾部,如把字符串abcdef左旋转2位得到字符串cdefab.请实现字符串左旋转的函数,要求对长度为n的字符串操作的时间复杂度为O(n),空间复杂度为O(n) 思路一.暴力移位法 核心思想:就是把需要移动的字符一步步移动到字符串的尾部 //暴力移位法void leftshiftone(char *s, int n) { char t = s[0];//保存第一个字符 for(int i = 1;i < n; i++

字符串旋转(str.find()---KMP)

此题旋转带有技巧性,问题转化为常见的问题,熟练STL可以直接用str.find()函数,其是主要想用KMP算法实现字符串的查找算法... //如果对于一个字符串A,将A的前面任意一部分挪到后边去形成的字符串称为A的旋转词.比如A = "12345", A的旋转词有"12345", "23451", "34512", "45123"和"51234".对于两个字符串A和B,请判断A和B是否互

字符串旋转的若干种算法 (待续)

题目描述: 对于一个字符串,和字符串中的某一位置,请设计一个算法,将包括i位置在内的左侧部分移动到右边,将右侧部分移动到左边. 给定字符串A和它的长度n以及特定位置p,请返回旋转后的结果. 测试样例: "AbcdeFgh",8,4  (为了方便起见我把两部分的起始元素用大写字母表示) 返回:"FghAbcde" 思路: ·方法一:将整个字符串左移或右移(p - 1)次 ·方法二: 将要分成的前部分或后部分整体移动 ·方法三:利用栈 如: 先将FGH放置到前面,变成&

abcdef-&amp;gt;cdefab(字符串旋转)

题目:左旋转字符串 定义字符串的左旋转操作:把字符串前面的若干个字符移动到字符串的尾部,如把字符串abcdef左旋转2位得到字符串cdefab. 请实现字符串左旋转的函数,要求对长度为n的字符串操作的时间复杂度为O(n),空间复杂度为O(n) 思路一.暴力移位法 核心思想:就是把须要移动的字符一步步移动到字符串的尾部 //暴力移位法void leftshiftone(char *s, int n) { char t = s[0];//保存第一个字符 for(int i = 1;i < n; i+

字符串旋转词、句子逆序化、字符串移位、最小字典序字符串问题

一:旋转词 把字符串前面任意部分挪到后面叫做词的旋转,如:1234->2341->3412.... 给定两个词,判断是否互为旋转词. 规律:只要把字符串A自身拼接到A末尾,那么A的旋转词都包含在A+A中了,所以只需在A+A中找B是否存在即可. 如:1234+1234=12341234 A的旋转词有:2341.3412.4123,分别对应12341234.12341234.12341234 public boolean chkRotation(String A, int lena, String